'''
# 读取医生诊断结果，统一标签格式
# 将医生诊断的腺癌和鳞癌结果提取出来，寻找到真实标签并保存
# 计算医生在二分类上的预测精度（ROC坐标点， PR坐标点）
'''

# 统计医生标注结果并格式化
import pandas as pd
import csv
from release_code.data_analysis.data_two_metrics import base, auc_curve
import numpy as np

#对照标签{1:腺癌，2:鳞癌，3:腺鳞癌，4:大细胞癌, 5:SCLC}
type_label = [1, 2, 3, 4, 5]


# 读取医生诊断结果，统一标签格式，并保存为doctor_result.csv
def read_doctor():
    df1 = pd.read_excel('D:/lung_cancer/data/Doctor_diagnosis.xlsx')
    id_list = list(df1['病人编号'])
    type_list = list(df1['肺癌类型（专家直接在图像上判断是哪五种肺癌类型）'])
    save_type_list = []
    save_id_list = []
    for i in range(len(id_list)):
        if str(type_list[i]) == 'nan':
            continue
        elif str(type_list[i]) == '腺癌':
            save_id_list.append(id_list[i])
            save_type_list.append(1)
        elif str(type_list[i]) == '鳞癌':
            save_id_list.append(id_list[i])
            save_type_list.append(2)
        elif str(type_list[i]) == '腺鳞癌':
            save_id_list.append(id_list[i])
            save_type_list.append(3)
        elif str(type_list[i]) == '大细胞癌':
            save_id_list.append(id_list[i])
            save_type_list.append(4)
        elif str(type_list[i]) == '小细胞癌':
            save_id_list.append(id_list[i])
            save_type_list.append(5)

    dataframe = pd.DataFrame({'patientID': save_id_list, 'type': save_type_list})
    dataframe.to_csv('D:/lung_cancer/data/doctor_result.csv', index=False)


# 将医生诊断的腺癌和鳞癌结果提取出来，寻找到真实标签，并保存为doctor_two_result.csv
def divide_two_result():
    labels_data = open('D:/lung_cancer/data/divide_csv/two/test.csv')
    labels_read_lines = csv.reader(labels_data)
    data1 = []
    for line in labels_read_lines:
        data1.append(line)

    doctor_csv_file = open('D:/lung_cancer/data/doctor_result.csv')

    csv_reader_lines = csv.reader(doctor_csv_file)
    data2 = []
    for one_line in csv_reader_lines:
        data2.append(one_line)
    test_list = []

    # 统计腺癌和鳞癌的测试集数量
    for i in range(1, len(data2)):
        for j in range(1, len(data1)):
            if str(data2[i][0]) == str(data1[j][1]):
                test_list.append([data2[i][0], data2[i][1], data1[j][6]])


    df = pd.DataFrame(test_list, columns=['patientID', 'pred_type', 'label'])
    df.to_csv('D:/lung_cancer/data/doctor_two_result.csv', index=False)


# 计算医生标注的腺癌和鳞癌分类指标
def calculate_result():
    data = pd.read_csv('D:/lung_cancer/data/doctor_two_result.csv')
    preds = np.asarray(list(data['pred_type']))-1
    y = np.asarray(list(data['label']))-1

    print(preds)
    print(y)
    tp, tn, fp, fn = base(y, preds, 0.5)
    print(tp, tn, fp, fn)
    tpr = float(tp)/(tp+fn)
    fpr = float(fp)/(fp+tn)
    print('医生标记二分类ROC结果横坐标（fpr）：%f' % fpr)
    print('医生标记二分类ROC结果纵坐标（tpr）：%f' % tpr)

    precision = float(tp)/(tp+fp)
    recall = float(tp)/(tp+fn)
    print('医生标记二分类P-R结果横坐标（recall）：%f' % recall)
    print('医生标记二分类P-R结果纵坐标（precision）：%f' % precision)


if __name__ == '__main__':
    # read_doctor()
    # divide_two_result()
    calculate_result()